package leetCode;

public class Q7 {
    /**
     * 给你一个 32 位的有符号整数 x ，返回将 x 中的数字部分反转后的结果。
     * 如果反转后整数超过 32 位的有符号整数的范围[−231, 231− 1] ，就返回 0。
     * 假设环境不允许存储 64 位整数（有符号或无符号）。
     */

    public int reverse(int x) {
        char[] arr = String.valueOf(x).toCharArray();
        boolean positive = arr[0] != '-';

        StringBuilder sb = new StringBuilder();
        boolean first = true;

        for(int i = arr.length-1;i>0;i--){
            if(first&&arr[i] == '0'){
                continue;
            }else {
                //当前字符添加到sb中
                sb.append(arr[i]);
                first = false;
            }
        }
        if(positive) sb.append(arr[0]);

        //处理输出
        String s = sb.toString();
        String maxString = String.valueOf(Integer.MAX_VALUE);

        if(maxString.length()>s.length()){
            return positive?Integer.parseInt(s):-1*Integer.parseInt(s);
        }else if (maxString.length()==s.length()){
            if(maxString.compareTo(s)>=0){
                return positive?Integer.parseInt(s):-1*Integer.parseInt(s);
            } else if (!positive && s.equals(String.valueOf(0x80000000))) {
                return positive?Integer.parseInt(s):-1*Integer.parseInt(s);
            } else {
                return 0;
            }
        }else {
            return 0;
        }
    }

    public static void main(String[] args) {
        System.out.println(new Q7().reverse(-1563847412));
    }
}
